home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / GAMES / WIMP / MINES2 / !Mines / s / HintA next >
Text File  |  1995-02-03  |  15KB  |  710 lines

  1. ; Assemblercode der Routine test_if_possible
  2. ; typedef struct {char x,y,test,domain;} border_typ;
  3.  
  4.     AREA     |C$$code|, CODE, READONLY
  5.     EXPORT    |test_if_possible|
  6.  
  7. r0    RN 0
  8. r1    RN 1
  9. r2    RN 2
  10. r3    RN 3
  11. r4    RN 4
  12. r5    RN 5
  13. r6    RN 6
  14. r7    RN 7
  15. r8    RN 8
  16. r9    RN 9
  17. r10    RN 10
  18. r11    RN 11
  19. r12    RN 12
  20. r13    RN 13
  21. r14    RN 14
  22. r15    RN 15
  23.  
  24. sl    RN 10 ; stack limit
  25. fp    RN 11 ; frame pointer
  26. ip    RN 12 ; temporary workspace
  27. sp    RN 13 ; stack pointer
  28. lr    RN 14 ; link register
  29. pc    RN 15 ; program counter
  30.  
  31. d    RN 0
  32. XMAX    RN 1
  33. YMAX    RN 2
  34. feld    RN 3
  35. ptr    RN 3
  36. x    RN 4
  37. y    RN 5
  38. test    RN 6
  39. _14    RN 7
  40. _58    RN 8
  41. buffer1 RN 9
  42. buffer2 RN 10
  43. mines    RN 11
  44. marks    RN 12
  45.  
  46. MINE_1  EQU &00000001
  47. MINE_2  EQU &00000100
  48. MINE_3  EQU &00010000
  49. MINE_4  EQU &01000000
  50.  
  51. MARK_1  EQU &00000002
  52. MARK_2  EQU &00000200
  53. MARK_3  EQU &00020000
  54. MARK_4  EQU &02000000
  55.  
  56. CLOSED_1 EQU &00000004
  57. CLOSED_2 EQU &00000400
  58. CLOSED_3 EQU &00040000
  59. CLOSED_4 EQU &04000000
  60.  
  61. ; a  b  c  d  e
  62. ; f  1  2  3  g
  63. ; h  4  X  5  i
  64. ; j  6  7  8  k
  65. ; l  m  n  o  p
  66.  
  67.     DCB "test_if_possible",0
  68.  
  69.     ALIGN
  70.  
  71. ; test_if_possible(border_typ *b,int XMAX,int YMAX,char *feld);
  72. |test_if_possible|
  73.     STMFD    sp!,{r4-r12,r14}
  74.     LDRB    x,[r0]
  75.     LDRB    y,[r0,#1]
  76.     LDR    test,[r0,#4]
  77.     MUL    d,x,YMAX
  78.     ADD    d,d,y
  79.     ADD    ptr,feld,d,LSL #2
  80.     CMP    y,#0
  81.     MOVLE    _14,#CLOSED_1        ; fields 1,2 and 3 are closed
  82.     ORRLE    _14,_14,#CLOSED_2    ; and need not be processed
  83.     ORRLE    _14,_14,#CLOSED_3
  84.     BLE    middle
  85.     SUB    ptr,ptr,#4
  86.     CMP    x,#0
  87.     LDRGTB  _14,[ptr,-YMAX,LSL #2]        ; load field no 1
  88.     MOVLE    _14,#CLOSED_1
  89.     LDRB    d,[ptr]            ; load field no 2
  90.     ORR    _14,_14,d,LSL #8
  91.     SUB    d,XMAX,x
  92.     CMP    d,#1
  93.     LDRGTB    d,[ptr,YMAX,LSL #2]    ; load field no 3
  94.     MOVLE    d,#CLOSED_1
  95.     ORR    _14,_14,d,LSL #16
  96.     ADD    ptr,ptr,#4
  97. middle
  98.     CMP    x,#0
  99.     LDRGTB    d,[ptr,-YMAX,LSL #2]    ; load field no 4
  100.     MOVLE    d,#CLOSED_1
  101.     ORR    _14,_14,d,LSL #24
  102.     LDRB    buffer1,[ptr]        ; load field X
  103.     SUB    d,XMAX,x
  104.     CMP    d,#1
  105.     LDRGTB    _58,[ptr,YMAX,LSL #2]    ; load field no 5
  106.     MOVLE    _58,#CLOSED_1
  107.  
  108.     SUB    d,YMAX,y
  109.     CMP    d,#1
  110.     ORRLE    _58,_58,#CLOSED_2
  111.     ORRLE    _58,_58,#CLOSED_3
  112.     ORRLE    _58,_58,#CLOSED_4
  113.     BLE    init_done
  114.  
  115.     ADD    ptr,ptr,#4
  116.     CMP    x,#0
  117.     LDRGTB    d,[ptr,-YMAX,LSL #2]    ; load field no 6
  118.     MOVLE    d,#CLOSED_1
  119.     ORR    _58,_58,d,LSL #8
  120.     LDRB    d,[ptr]            ; load field no 7
  121.     ORR    _58,_58,d,LSL #16
  122.     SUB    d,XMAX,x
  123.     CMP    d,#1
  124.     LDRGTB    d,[ptr,YMAX,LSL #2]    ; load field no 8
  125.     MOVLE    d,#CLOSED_1
  126.     ORR    _58,_58,d,LSL #24
  127.     SUB    ptr,ptr,#4
  128. init_done
  129.     MOV    buffer2,#0
  130.  
  131. field_1
  132.     TST    _14,#CLOSED_1            ; buffer1 = X 0 0 0
  133.     BNE    field_2                ; buffer2 = 0 0 0 0
  134.     CMP    y,#2
  135.     BLT    f1_abc
  136.     SUB    ptr,ptr,#8
  137.     CMP    x,#2
  138.     LDRGEB    d,[ptr,-YMAX, LSL #3]        ; load a
  139.     ORRGE   buffer1,buffer1,d,LSL #8
  140.     CMP    x,#1
  141.     LDRGEB  d,[ptr,-YMAX,LSL #2]        ; load b
  142.     ORRGE    buffer1,buffer1,d,LSL #16
  143.     LDRB    d,[ptr]                ; load c
  144.     ORR    buffer1,buffer1,d,LSL #24
  145.     ADD    ptr,ptr,#8
  146. f1_abc
  147.     CMP    x,#2
  148.     BLT    f1_fh
  149.     SUB    ptr,ptr,YMAX,LSL #3
  150.     CMP    y,#1
  151.     LDRGEB  buffer2,[ptr,-#4]        ; load f
  152.     LDRB    d,[ptr]                ; load h
  153.     ORR    buffer2,buffer2,d,LSL #8
  154.     ADD    ptr,ptr,YMAX,LSL #3    ; buffer1 = X a b c
  155. f1_fh                    ; buffer2 = f h 0 0
  156.     MOV    mines,#0
  157.     TST    buffer1,#MINE_1
  158.     ADDNE    mines,mines,#1
  159.     TST    buffer1,#MINE_2
  160.     ADDNE    mines,mines,#1
  161.     TST    buffer1,#MINE_3
  162.     ADDNE    mines,mines,#1
  163.     TST    buffer1,#MINE_4
  164.     ADDNE    mines,mines,#1
  165.     TST    buffer2,#MINE_1
  166.     ADDNE    mines,mines,#1
  167.     TST    buffer2,#MINE_2
  168.     ADDNE    mines,mines,#1
  169.     TST    _14,#MINE_2
  170.     ADDNE    mines,mines,#1
  171.     TST    _14,#MINE_4
  172.     ADDNE    mines,mines,#1
  173.     MOV    marks,#0
  174.     TST    buffer1,#MARK_1
  175.     ADDNE    marks,marks,#1
  176.     TST    buffer1,#MARK_2
  177.     ADDNE    marks,marks,#1
  178.     TST    buffer1,#MARK_3
  179.     ADDNE    marks,marks,#1
  180.     TST    buffer1,#MARK_4
  181.     ADDNE      marks,marks,#1
  182.     TST    buffer2,#MARK_1
  183.     ADDNE    marks,marks,#1
  184.     TST    buffer2,#MARK_2
  185.     ADDNE    marks,marks,#1
  186.     TST    _14,#MARK_2
  187.     ADDNE    marks,marks,#1
  188.     TST    _14,#MARK_4
  189.     ADDNE    marks,marks,#1
  190.     CMP    marks,mines
  191.     BGT    tip_false
  192.     MOV    d,test
  193.     AND    d,d,#&F
  194.     ADD    d,d,marks
  195.     CMP    d,mines
  196.     BLT    tip_false
  197. field_2 TST    _14,#CLOSED_2        ; buffer1 = X a b c
  198.     BNE    field_3            ; buffer2 = f h 0 0
  199.     BIC    buffer1,buffer1,#&0000FF00    ; delete a
  200.     TST    _14,#CLOSED_1
  201.     BEQ    f2_bc_loaded
  202.     CMP    y,#2
  203.     BLT    f2_d
  204.     SUB    ptr,ptr,#8
  205.     CMP    x,#1
  206.     LDRGEB  d,[ptr,-YMAX,LSL #2]        ; load b
  207.     ORRGE    buffer1,buffer1,d,LSL #16
  208.     LDRB    d,[ptr]                ; load c
  209.     ORR    buffer1,buffer1,d,LSL #24
  210.     SUB    d,XMAX,x
  211.     CMP    d,#1
  212.         LDRGTB    d,[ptr,YMAX,LSL #2]        ; load d
  213.     ORRGT    buffer1,buffer1,d,LSL #8
  214.     ADD    ptr,ptr,#8
  215.     B    f2_d
  216. f2_bc_loaded
  217.     CMP    y,#2
  218.     BLT    f2_d
  219.     SUB    ptr,ptr,#8
  220.     SUB    d,XMAX,x
  221.     CMP    d,#1
  222.         LDRGTB    d,[ptr,YMAX,LSL #2]        ; load d
  223.     ORRGT    buffer1,buffer1,d,LSL #8
  224.     ADD    ptr,ptr,#8
  225. f2_d    MOV    mines,#0        ; buffer1 = X d b c
  226.     TST    buffer1,#MINE_1        ; buffer2 = f h 0 0
  227.     ADDNE    mines,mines,#1
  228.     TST    buffer1,#MINE_2
  229.     ADDNE    mines,mines,#1
  230.     TST    buffer1,#MINE_3
  231.     ADDNE    mines,mines,#1
  232.     TST    buffer1,#MINE_4
  233.     ADDNE    mines,mines,#1
  234.     TST    _14,#MINE_1
  235.     ADDNE    mines,mines,#1
  236.     TST    _14,#MINE_3
  237.     ADDNE    mines,mines,#1
  238.     TST    _14,#MINE_4
  239.     ADDNE    mines,mines,#1
  240.     TST    _58,#MINE_1
  241.     ADDNE    mines,mines,#1
  242.     MOV    marks,#0
  243.     TST    buffer1,#MARK_1
  244.     ADDNE    marks,marks,#1
  245.     TST    buffer1,#MARK_2
  246.     ADDNE    marks,marks,#1
  247.     TST    buffer1,#MARK_3
  248.     ADDNE    marks,marks,#1
  249.     TST    buffer1,#MARK_4
  250.     ADDNE    marks,marks,#1
  251.     TST    _14,#MARK_1
  252.     ADDNE    marks,marks,#1
  253.     TST    _14,#MARK_3
  254.     ADDNE    marks,marks,#1
  255.     TST    _14,#MARK_4
  256.     ADDNE    marks,marks,#1
  257.     TST    _58,#MARK_1
  258.     ADDNE    marks,marks,#1
  259.     CMP    marks,mines
  260.     BGT    tip_false
  261.     MOV    d,test,LSR #4
  262.     AND    d,d,#&F
  263.     ADD    d,d,marks
  264.     CMP    d,mines
  265.     BLT    tip_false
  266. field_3 TST    _14,#CLOSED_3            ; buffer1 = X d b c
  267.     BNE    field_5                ; buffer2 = f h 0 0
  268.     TST    _14,#CLOSED_2
  269.     BEQ    f3_cd_loaded
  270.     BIC    buffer1,buffer1,#&0000FF00    ; delete a
  271.     CMP    y,#2
  272.     BLT    f3_cd_loaded
  273.     SUB    ptr,ptr,#8
  274.     LDRB    d,[ptr]                ; load c
  275.     ORR    buffer1,buffer1,d,LSL #24
  276.     SUB    d,XMAX,x
  277.     CMP    d,#1
  278.         LDRGTB    d,[ptr,YMAX,LSL #2]        ; load d
  279.     ORRGT    buffer1,buffer1,d,LSL #8
  280.     ADD    ptr,ptr,#8
  281. f3_cd_loaded
  282.     BIC    buffer1,buffer1,#&00FF0000    ; delete b
  283.     SUB    d,XMAX,x
  284.     CMP    d,#2
  285.     BLE    f3_egi
  286.     ADD    ptr,ptr,YMAX,LSL #3
  287.     CMP    y,#2
  288.     LDRGEB    d,[ptr,-#8]            ; load e
  289.     ORRGE    buffer1,buffer1,d,LSL #16
  290.     CMP    y,#1
  291.     LDRGEB    d,[ptr,-#4]            ; load g
  292.     ORRGE    buffer2,buffer2,d,LSL #16
  293.     LDRB    d,[ptr]                ; load i
  294.     ORR    buffer2,buffer2,d,LSL #24
  295.     SUB    ptr,ptr,YMAX,LSL #3
  296. f3_egi    MOV    mines,#0        ; buffer1 = X d e c
  297.     TST    buffer1,#MINE_1        ; buffer2 = f h g i
  298.     ADDNE    mines,mines,#1
  299.     TST    buffer1,#MINE_2
  300.     ADDNE    mines,mines,#1
  301.     TST    buffer1,#MINE_3
  302.     ADDNE    mines,mines,#1
  303.     TST    buffer1,#MINE_4
  304.     ADDNE    mines,mines,#1
  305.     TST    buffer2,#MINE_3
  306.     ADDNE    mines,mines,#1
  307.     TST    buffer2,#MINE_4
  308.     ADDNE    mines,mines,#1
  309.     TST    _14,#MINE_2
  310.     ADDNE    mines,mines,#1
  311.     TST    _58,#MINE_1
  312.     ADDNE    mines,mines,#1
  313.     MOV    marks,#0
  314.     TST    buffer1,#MARK_1
  315.     ADDNE    marks,marks,#1
  316.     TST    buffer1,#MARK_2
  317.     ADDNE    marks,marks,#1
  318.     TST    buffer1,#MARK_3
  319.     ADDNE    marks,marks,#1
  320.     TST    buffer1,#MARK_4
  321.     ADDNE    marks,marks,#1
  322.     TST    buffer2,#MARK_3
  323.     ADDNE    marks,marks,#1
  324.     TST    buffer2,#MARK_4
  325.     ADDNE    marks,marks,#1
  326.     TST    _14,#MARK_2
  327.     ADDNE    marks,marks,#1
  328.     TST    _58,#MARK_1
  329.     ADDNE    marks,marks,#1
  330.     CMP    marks,mines
  331.     BGT    tip_false
  332.     MOV    d,test,LSR #8
  333.     AND    d,d,#&F
  334.     ADD    d,d,marks
  335.     CMP    d,mines
  336.     BLT    tip_false
  337. field_5 TST     _58,#CLOSED_1            ; buffer1 = X d e c
  338.     BNE    field_8                ; buffer2 = f h g i
  339.     BIC    buffer1,buffer1,#&FF000000    ; delete c
  340.     TST    _14,#CLOSED_3
  341.     BEQ    f5_gi_loaded
  342.     SUB    d,XMAX,x
  343.     CMP    d,#2
  344.     BLE    f5_gi_loaded
  345.     ADD    ptr,ptr,YMAX,LSL #3
  346.     CMP    y,#1
  347.     LDRGEB    d,[ptr,-#4]            ; load g
  348.     ORRGE    buffer2,buffer2,d,LSL #16
  349.     LDRB    d,[ptr]                ; load i
  350.     ORR    buffer2,buffer2,d,LSL #24
  351.     SUB    d,YMAX,y
  352.     CMP    d,#1
  353.     LDRGTB    d,[ptr,#4]            ; load k
  354.     ORRGT    buffer1,buffer1,d,LSL #24
  355.     SUB    ptr,ptr,YMAX,LSL #3
  356.     B    f5_k
  357. f5_gi_loaded
  358.     SUB    d,XMAX,x
  359.     CMP    d,#2
  360.     BLE    f5_k
  361.     ADD    ptr,ptr,YMAX,LSL #3
  362.     SUB    d,YMAX,y
  363.     CMP    d,#1
  364.     LDRGTB    d,[ptr,#4]            ; load k
  365.     ORRGT    buffer1,buffer1,d,LSL #24
  366.     SUB    ptr,ptr,YMAX,LSL #3
  367. f5_k    MOV    mines,#0            ; buffer1 = X d e k
  368.     TST    buffer1,#MINE_1            ; buffer2 = f h g i
  369.     ADDNE    mines,mines,#1
  370.     TST    buffer1,#MINE_4
  371.     ADDNE    mines,mines,#1
  372.     TST    buffer2,#MINE_3
  373.     ADDNE    mines,mines,#1
  374.     TST    buffer2,#MINE_4
  375.     ADDNE    mines,mines,#1
  376.     TST    _14,#MINE_2
  377.     ADDNE    mines,mines,#1
  378.     TST    _14,#MINE_3
  379.     ADDNE    mines,mines,#1
  380.     TST    _58,#MINE_3
  381.     ADDNE    mines,mines,#1
  382.     TST    _58,#MINE_4
  383.     ADDNE    mines,mines,#1
  384.     MOV    marks,#0
  385.     TST    buffer1,#MARK_1
  386.     ADDNE    marks,marks,#1
  387.     TST    buffer1,#MARK_4
  388.     ADDNE    marks,marks,#1
  389.     TST    buffer2,#MARK_3
  390.     ADDNE    marks,marks,#1
  391.     TST    buffer2,#MARK_4
  392.     ADDNE    marks,marks,#1
  393.     TST    _14,#MARK_2
  394.     ADDNE    marks,marks,#1
  395.     TST    _14,#MARK_3
  396.     ADDNE    marks,marks,#1
  397.     TST    _58,#MARK_3
  398.     ADDNE    marks,marks,#1
  399.     TST    _58,#MARK_4
  400.     ADDNE    marks,marks,#1
  401.     CMP    marks,mines
  402.     BGT    tip_false
  403.     MOV    d,test,LSR #16
  404.     AND    d,d,#&F
  405.     ADD    d,d,marks
  406.     CMP    d,mines
  407.     BLT    tip_false
  408. field_8 TST    _58,#CLOSED_4            ; buffer1 = X d e k
  409.     BNE    field_7                ; buffer2 = f h g i
  410.     TST    _58,#CLOSED_1
  411.     BEQ    f8_ik_loaded
  412.     BIC    buffer1,buffer1,#&FF000000    ; delete c
  413.     SUB    d,XMAX,x
  414.     CMP    d,#2
  415.     BLE    f8_ik_loaded
  416.     ADD    ptr,ptr,YMAX,LSL #3
  417.     LDRB    d,[ptr]                ; load i
  418.     ORR    buffer2,buffer2,d,LSL #24
  419.     SUB    d,YMAX,y
  420.     CMP    d,#1
  421.     LDRGTB    d,[ptr,#4]            ; load k
  422.     ORRGT    buffer1,buffer1,d,LSL #24
  423.     SUB    ptr,ptr,YMAX,LSL #3
  424. f8_ik_loaded
  425.     BIC    buffer2,buffer2,#&00FF0000
  426.     BIC    buffer1,buffer1,#&0000FF00
  427.     BIC    buffer1,buffer1,#&00FF0000
  428.     SUB    d,YMAX,y
  429.     CMP    d,#2
  430.     BLE    f8_no_loaded
  431.     ADD    ptr,ptr,#8
  432.     LDRB    d,[ptr]                ; load n
  433.     ORR    buffer2,buffer2,d,LSL #16
  434.     SUB    d,XMAX,x
  435.     CMP    d,#1
  436.     LDRGTB    d,[ptr,YMAX,LSL #2]        ; load o
  437.     ORRGT    buffer1,buffer1,d,LSL #16
  438.     SUB    d,XMAX,x
  439.     CMP    d,#2
  440.     LDRGTB    d,[ptr,YMAX,LSL #3]        ; load p
  441.     ORRGT    buffer1,buffer1,d,LSL #8
  442.     SUB    ptr,ptr,#8
  443. f8_no_loaded
  444.     MOV    mines,#0            ; buffer1 = X p o k
  445.     TST    buffer1,#MINE_1            ; buffer2 = f h n i
  446.     ADDNE    mines,mines,#1
  447.     TST    buffer1,#MINE_2
  448.     ADDNE    mines,mines,#1
  449.     TST    buffer1,#MINE_3
  450.     ADDNE    mines,mines,#1
  451.     TST    buffer1,#MINE_4
  452.     ADDNE    mines,mines,#1
  453.     TST    buffer2,#MINE_3
  454.     ADDNE    mines,mines,#1
  455.     TST    buffer2,#MINE_4
  456.     ADDNE    mines,mines,#1
  457.     TST    _58,#MINE_1
  458.     ADDNE    mines,mines,#1
  459.     TST    _58,#MINE_3
  460.     ADDNE    mines,mines,#1
  461.     MOV    marks,#0
  462.     TST    buffer1,#MARK_1
  463.     ADDNE    marks,marks,#1
  464.     TST    buffer1,#MARK_2
  465.     ADDNE    marks,marks,#1
  466.     TST    buffer1,#MARK_3
  467.     ADDNE    marks,marks,#1
  468.     TST    buffer1,#MARK_4
  469.     ADDNE    marks,marks,#1
  470.     TST    buffer2,#MARK_3
  471.     ADDNE    marks,marks,#1
  472.     TST    buffer2,#MARK_4
  473.     ADDNE    marks,marks,#1
  474.     TST    _58,#MARK_1
  475.     ADDNE    marks,marks,#1
  476.     TST    _58,#MARK_3
  477.     ADDNE    marks,marks,#1
  478.     CMP    marks,mines
  479.     BGT    tip_false
  480.     MOV    d,test,LSR #28
  481.     AND    d,d,#&F
  482.     ADD    d,d,marks
  483.     CMP    d,mines
  484.     BLT    tip_false
  485. field_7 TST    _58,#CLOSED_3            ; buffer1 = X p o k
  486.     BNE    field_6                ; buffer2 = f h n i
  487.     BIC    buffer2,buffer2,#&FF000000    ; delete i
  488.     TST    _58,#CLOSED_4
  489.     BEQ    f7_no_loaded
  490.     BIC    buffer1,buffer1,#&00FF0000    ; delete k
  491.     BIC    buffer2,buffer2,#&00FF0000    ; delete p
  492.     SUB    d,YMAX,y
  493.     CMP    d,#2
  494.     BLE    f7_no_loaded
  495.     ADD    ptr,ptr,#8
  496.     CMP    x,#1
  497.     LDRGEB    d,[ptr,-YMAX,LSL #2]        ; load m
  498.     ORRGE    buffer2,buffer2,d,LSL #24
  499.     LDRB    d,[ptr]                ; load n
  500.     ORR    buffer2,buffer2,d,LSL #16
  501.     SUB    d,XMAX,x
  502.     CMP    d,#1
  503.     LDRGTB    d,[ptr,YMAX,LSL #2]        ; load o
  504.     ORRGT    buffer1,buffer1,d,LSL #16
  505.     SUB    ptr,ptr,#8
  506.     B    f7_m
  507. f7_no_loaded
  508.     SUB    d,YMAX,y
  509.     CMP    d,#2
  510.     BLE    f7_m
  511.     ADD    ptr,ptr,#8
  512.     SUB    d,XMAX,x
  513.     CMP    d,#1
  514.     LDRGTB    d,[ptr,-YMAX,LSL #2]        ; load m
  515.     ORRGT    buffer2,buffer2,d,LSL #24
  516.     SUB    ptr,ptr,#8
  517. f7_m    MOV    mines,#0            ; buffer1 = X p o k
  518.     TST    buffer1,#MINE_1            ; buffer2 = f h n m
  519.     ADDNE    mines,mines,#1
  520.     TST    buffer1,#MINE_3
  521.     ADDNE    mines,mines,#1
  522.     TST    buffer2,#MINE_3
  523.     ADDNE    mines,mines,#1
  524.     TST    buffer2,#MINE_4
  525.     ADDNE    mines,mines,#1
  526.     TST    _14,#MINE_4
  527.     ADDNE    mines,mines,#1
  528.     TST    _58,#MINE_1
  529.     ADDNE    mines,mines,#1
  530.     TST    _58,#MINE_2
  531.     ADDNE    mines,mines,#1
  532.     TST    _58,#MINE_4
  533.     ADDNE    mines,mines,#1
  534.     MOV    marks,#0
  535.     TST    buffer1,#MARK_1
  536.     ADDNE    marks,marks,#1
  537.     TST    buffer1,#MARK_3
  538.     ADDNE    marks,marks,#1
  539.     TST    buffer2,#MARK_3
  540.     ADDNE    marks,marks,#1
  541.     TST    buffer2,#MARK_4
  542.     ADDNE    marks,marks,#1
  543.     TST    _14,#MARK_4
  544.     ADDNE    marks,marks,#1
  545.     TST    _58,#MARK_1
  546.     ADDNE    marks,marks,#1
  547.     TST    _58,#MARK_2
  548.     ADDNE    marks,marks,#1
  549.     TST    _58,#MARK_4
  550.     ADDNE    marks,marks,#1
  551.     CMP    marks,mines
  552.     BGT    tip_false
  553.     MOV    d,test,LSR #24
  554.     AND    d,d,#&F
  555.     ADD    d,d,marks
  556.     CMP    d,mines
  557.     BLT    tip_false
  558. field_6 TST    _58,#CLOSED_2            ; buffer1 = X p o k
  559.     BNE    field_4                ; buffer2 = f h n m
  560.     TST    _58,#CLOSED_3
  561.     BEQ    f6_mn_loaded
  562.     BIC    buffer2,buffer2,#&00FF0000    ; delete m
  563.     BIC    buffer2,buffer2,#&FF000000    ; delete n
  564.     SUB    d,YMAX,y
  565.     CMP    d,#2
  566.     BLE    f6_mn_loaded
  567.     ADD    ptr,ptr,#8
  568.     CMP    x,#1
  569.     LDRGEB    d,[ptr,-YMAX,LSL #2]        ; load m
  570.     ORRGE    buffer2,buffer2,d,LSL #24
  571.     LDRB    d,[ptr]                ; load n
  572.     ORR    buffer2,buffer2,d,LSL #16
  573.     SUB    ptr,ptr,#8
  574. f6_mn_loaded
  575.     BIC    buffer1,buffer1,#&0000FF00    ; delete d
  576.     BIC    buffer1,buffer1,#&00FF0000    ; delete e
  577.     BIC    buffer1,buffer1,#&FF000000    ; delete g
  578.     CMP    x,#2
  579.     BLT    f6_hjl
  580.     SUB    ptr,ptr,YMAX,LSL #3
  581.     LDRB    d,[ptr]                ; load h
  582.     ORR    buffer1,buffer1,d,LSL #8
  583.     SUB    d,YMAX,y
  584.     CMP    d,#1
  585.     LDRGTB    d,[ptr,#4]            ; load j
  586.     ORRGT    buffer1,buffer1,d,LSL #16
  587.     SUB    d,YMAX,y
  588.     CMP    d,#2
  589.     LDRGTB    d,[ptr,#8]            ; load l
  590.     ORRGT    buffer1,buffer1,d,LSL #24
  591.     ADD    ptr,ptr,YMAX,LSL #3
  592. f6_hjl    MOV    mines,#0            ; buffer1 = X h j l
  593.     TST    buffer1,#MINE_1            ; buffer2 = f h n m
  594.     ADDNE    mines,mines,#1
  595.     TST    buffer1,#MINE_2
  596.     ADDNE    mines,mines,#1
  597.     TST    buffer1,#MINE_3
  598.     ADDNE    mines,mines,#1
  599.     TST    buffer1,#MINE_4
  600.     ADDNE    mines,mines,#1
  601.     TST    buffer2,#MINE_3
  602.     ADDNE    mines,mines,#1
  603.     TST    buffer2,#MINE_4
  604.     ADDNE    mines,mines,#1
  605.     TST    _14,#MINE_4
  606.     ADDNE    mines,mines,#1
  607.     TST    _58,#MINE_3
  608.     ADDNE    mines,mines,#1
  609.     MOV    marks,#0
  610.     TST    buffer1,#MARK_1
  611.     ADDNE    marks,marks,#1
  612.     TST    buffer1,#MARK_2
  613.     ADDNE    marks,marks,#1
  614.     TST    buffer1,#MARK_3
  615.     ADDNE    marks,marks,#1
  616.     TST    buffer1,#MARK_4
  617.     ADDNE    marks,marks,#1
  618.     TST    buffer2,#MARK_3
  619.     ADDNE    marks,marks,#1
  620.     TST    buffer2,#MARK_4
  621.     ADDNE    marks,marks,#1
  622.     TST    _14,#MARK_4
  623.     ADDNE    marks,marks,#1
  624.     TST    _58,#MARK_3
  625.     ADDNE    marks,marks,#1
  626.     CMP    marks,mines
  627.     BGT    tip_false
  628.     MOV    d,test,LSR #20
  629.     AND    d,d,#&F
  630.     ADD    d,d,marks
  631.     CMP    d,mines
  632.     BLT    tip_false
  633. field_4 TST    _14,#CLOSED_4            ; buffer1 = X h j l
  634.     BNE    tip_true            ; buffer2 = f h n m
  635.     TST    _58,#CLOSED_2
  636.     BEQ    f4_hj_loaded
  637.     BIC    buffer1,buffer1,#&00FF0000
  638.     BIC    buffer1,buffer1,#&0000FF00
  639.     BIC    buffer2,buffer2,#&00FF0000
  640.     CMP    x,#2
  641.     BLT    f4_hj_loaded
  642.     SUB    ptr,ptr,YMAX,LSL #3
  643.     CMP    y,#1
  644.     LDRGEB  d,[ptr,-#4]            ; load f
  645.     ORRGE    buffer2,buffer2,d,LSL #16
  646.     LDRB    d,[ptr]                ; load h
  647.     ORR    buffer1,buffer1,d,LSL #8
  648.     SUB    d,YMAX,y
  649.     CMP    d,#1
  650.     LDRGTB    d,[ptr,#4]            ; load j
  651.     ORRGT    buffer1,buffer1,d,LSL #16
  652.     ADD    ptr,ptr,YMAX,LSL #3
  653.     B    f4_f
  654. f4_hj_loaded
  655.        BIC    buffer2,buffer2,#&00FF0000    ; delete
  656.     CMP    x,#2
  657.     BLT    f4_f
  658.     SUB    ptr,ptr,YMAX,LSL #3
  659.     CMP    y,#1
  660.     LDRGEB    d,[ptr,-#4]            ; load f
  661.     ORRGE    buffer2,buffer2,d,LSL #16
  662.     ADD    ptr,ptr,YMAX,LSL #3
  663. f4_f    MOV    mines,#0            ; buffer1 = X h j l
  664.     TST    buffer1,#MINE_1            ; buffer2 = f h f m
  665.     ADDNE    mines,mines,#1
  666.     TST    buffer1,#MINE_2
  667.     ADDNE    mines,mines,#1
  668.     TST    buffer1,#MINE_3
  669.     ADDNE    mines,mines,#1
  670.     TST    buffer2,#MINE_3
  671.     ADDNE    mines,mines,#1
  672.     TST     _14,#MINE_1
  673.     ADDNE    mines,mines,#1
  674.     TST     _14,#MINE_2
  675.     ADDNE    mines,mines,#1
  676.     TST     _58,#MINE_2
  677.     ADDNE    mines,mines,#1
  678.     TST     _58,#MINE_3
  679.     ADDNE    mines,mines,#1
  680.     MOV    marks,#0
  681.     TST    buffer1,#MARK_1
  682.     ADDNE    marks,marks,#1
  683.     TST    buffer1,#MARK_2
  684.     ADDNE    marks,marks,#1
  685.     TST    buffer1,#MARK_3
  686.     ADDNE    marks,marks,#1
  687.     TST    buffer2,#MARK_3
  688.     ADDNE    marks,marks,#1
  689.     TST    _14,#MARK_1
  690.     ADDNE    marks,marks,#1
  691.     TST    _14,#MARK_2
  692.     ADDNE    marks,marks,#1
  693.     TST    _58,#MARK_2
  694.     ADDNE    marks,marks,#1
  695.     TST    _58,#MARK_3
  696.     ADDNE    marks,marks,#1
  697.     CMP    marks,mines
  698.     BGT    tip_false
  699.     MOV    d,test,LSR #12
  700.     AND    d,d,#&F
  701.     ADD    d,d,marks
  702.     CMP    d,mines
  703.     BLT    tip_false
  704. tip_true MOV    r0,#1
  705.     LDMFD    sp!,{r4-r12,pc}
  706. tip_false MOV    r0,#0
  707.     LDMFD    sp!,{r4-r12,pc}
  708.  
  709.     END
  710.